<?php

namespace apiend\models;

use Yii;
use yii\filters\RateLimitInterface;

/**
 * 账号信息
 * @author emhome <emhome@163.com>
 * @since 1.0
 */
class User extends \common\models\BaseUser implements RateLimitInterface {

    public $token;

    /**
     * 返回在单位时间内允许的请求的最大数目，例如，[10, 60] 表示在60秒内最多请求10次。
     * @return type
     */
    public function getAllowance() {
        return Yii::$app->cache->get($this->id . '_allowance');
    }

    /**
     * 返回更新时间
     */
    public function getAllowanceUpdatedAt() {
        return Yii::$app->cache->get($this->id . '_allowance_updated_at');
    }

    /**
     * 返回在单位时间内允许的请求的最大数目，例如，[10, 60] 表示在60秒内最多请求10次。
     * @return type
     */
    public function getRateLimit($request, $action) {
        return [10, 1];
    }

    /**
     * 返回剩余的允许的请求数
     * @return type
     */
    public function loadAllowance($request, $action) {
        return [$this->allowance, $this->allowanceUpdatedAt];
    }

    /**
     * 保存请求时的UNIX时间戳
     * @return type
     */
    public function saveAllowance($request, $action, $allowance, $timestamp) {
        Yii::$app->cache->set($this->id . '_allowance', $allowance);
        Yii::$app->cache->set($this->id . '_allowance_updated_at', $timestamp);
    }

    /**
     * 获取用户基础信息
     * @return \yii\db\ActiveQuery
     */
    public function getMeta() {
        return $this->hasOne(UserMeta::className(), ['id' => 'id']);
    }

    /**
     * 获取用户名
     * @return \yii\db\ActiveQuery
     */
    public function getNickname() {
        $meta = $this->meta;
        return $meta->nickname ?: $this->username;
    }

}
